package exerise;

/**
 * Created by jimmy on 2019/3/13.
 * 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
 * <p>
 * 示例 1:
 * <p>
 * 输入: 123
 * 输出: 321
 * 示例 2:
 * <p>
 * 输入: -123
 * 输出: -321
 * 示例 3:
 * <p>
 * 输入: 120
 * 输出: 21
 * 注意:
 * <p>
 * 假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为 [−2^31,  23^1−1]。请根据这个假设，如果反转后整数溢出那么就返回 0。
 */
public class Ex7 {

    public static void main(String[] args) {
        Ex7 ex7 = new Ex7();
        System.out.println("int min == " + Integer.MIN_VALUE);
        System.out.println("int max == " + Integer.MAX_VALUE);
        int result = ex7.reverse(2144847412);
        System.out.println("result == " + result);
    }

    public int reverse(int x) {
        int sum = 0;
        while (x != 0) {
            int temp = x % 10;
            if (sum > Integer.MAX_VALUE / 10 || (sum == Integer.MAX_VALUE / 10 && temp > 7) ||
                    sum < Integer.MIN_VALUE / 10 || (sum == Integer.MIN_VALUE / 10 && temp < -8)) {
                return 0;
            }
            sum = sum * 10 + temp;
            x /= 10;
        }
        return sum;
    }
}
